package com.choupin.choupin.interceptor;

import com.choupin.choupin.utils.StrUtil;
import com.choupin.choupin.utils.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/* 自定义一个用于登录判断的类
*  由于uniapp和后端跨域访问问题，导致使用继承springboot的拦截器无法使用共享session和cookie，导致无法使用这种方式进行拦截
*  使用方法：在每个需要拦截的controller方法里添加，该方法进行登录验证判断
*  */
@Component
public class MyLoginInterceptor {


    @Autowired
    private RedisUtils redisUtils;



//    用来给后端方法判断是否登录的状态
   public Boolean LoginInterceptor(String phone,String keyPhone,String keyTime){
//       先判断phone是否没空，没空则直接返回
       if (StrUtil.isBlank(phone)){
             return false;
       }
       if (StrUtil.isBlank(keyPhone)){
           return false;
       }
       if (StrUtil.isBlank(keyTime)){
           return false;
       }
       System.out.println("Phone："+phone);
       String sphone=RedisUtils.getValue(keyPhone);
       System.out.println("redis中Phone："+sphone);
//       如果session获取的手机号为空说明未登录或者登录失效，直接抛出异常“请先登录”
       if (StrUtil.isBlank(sphone)){
        return false;
       }
//       判断时间是否失效
       String loginTimestr=RedisUtils.getValue(keyTime);
       loginTimestr= loginTimestr.replace("T"," ").substring(0,loginTimestr.length()-4);
       System.out.println(loginTimestr);
       DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
       LocalDateTime loginTime=LocalDateTime.parse(loginTimestr,dateTimeFormatter);
       LocalDateTime nowTime=LocalDateTime.now();
       Duration duration=Duration.between(loginTime,nowTime);
       if (RedisUtils.LoginFailure(duration.toDays(),30,phone)){
           System.out.println("时间过期");
           return false;
       }

//       如果传来的手机号和redis中的相等则返回true，否则false
     if (phone.equals(sphone)){
         System.out.println("redis："+sphone);
         return true;
     }else {
      return false;
     }
   }



}
